package com.dhecp.project.system.mapper;

import com.dhecp.core.layui.TreeDataModel;
import com.dhecp.core.layui.TreeSelectDataModel;
import com.dhecp.core.genericDao.GenericDao;
import com.dhecp.project.system.domain.SysOrganizationInfo;
import com.dhecp.project.system.domain.SysUserInfo;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 组织机构
 * @author DH-Xxj
 * @version 2019年9月19日
 */
public interface SysOrganizationInfoMapper extends GenericDao<SysOrganizationInfo, String> {
	
	/**
	 * 通过机构名称查询单条记录
	 * @param orgName
	 * @return OrganizationInfo
	 * @author XDH
	 */
	SysOrganizationInfo findOrganizationInfoByOrgName(@Param("orgName") String orgName);
	
	/**
	 * 通过guid查询单条记录
	 * @param guid
	 * @return OrganizationInfo
	 * @author DH-Xxj
	 */
	SysOrganizationInfo findOrganizationInfoByGuid(@Param("guid") String guid);

	/**
	 * 通过orgid查询单条记录
	 * @param guid
	 * @return OrganizationInfo
	 * @author DH-Xxj
	 */
	SysOrganizationInfo findOrganizationInfoByOrgid(@Param("orgid") String orgid);
	
	/**
	 * 通过orgPathAll查询单条记录
	 * @param orgPathAll
	 * @return OrganizationInfo
	 * @author DH-Xxj
	 */
	SysOrganizationInfo findOrganizationInfoByOrgPathAll(@Param("orgPathAll") String orgPathAll);
	
	/**
	 * 通过OrgPathAll查询上级机构单条记录
	 * @param orgPathAll
	 * @return OrganizationInfo
	 * @author DH-Xxj
	 */
	SysOrganizationInfo findParentOrganizationInfoByOrgPathAll(@Param("orgPathAll") String orgPathAll);
	
	/**
	 * 通过OrgPathAll查询顶级部门单条记录
	 * @param orgPathAll
	 * @return OrganizationInfo
	 * @author DH-Xxj
	 */
	SysOrganizationInfo findTopDeptInfoByOrgPathAll(@Param("orgPathAll") String orgPathAll);
	
	/**
	 * 查询指定节点及其子节点
	 * @param orgPathAll
	 * @return List-SysOrganizationInfo
	 * @author DH-Xxj
	 */
	List<SysOrganizationInfo> findOrganizationInfoChilds(@Param("orgPathAll") String orgPathAll);
	
	/**
	 * 直接查询组织机构表的数据
	 * @param params
	 * @return List
	 * @author DH-Xxj
	 */
	List<SysOrganizationInfo> findOrganizationInfo(Map<String, Object> params);
	
	/**
	 * 部门列表
	 * @param params
	 * @return List
	 * @author kimiloo
	 */
	List<SysOrganizationInfo> findDeptInfo(Map<String, Object> params);
	
	/**
	 * 获取组织机构树
	 * @param params
	 * @return List
	 * @author DH-Xxj
	 */
	List<TreeDataModel> findOrganizationInfoTree(Map<String, Object> params);

	/**
	 * 获取组织机构树（含复选框）
	 * @param params
	 * @return List - TreeSelectDataModel
	 * @author DH-Xxj
	 */
	List<TreeSelectDataModel> findOrganizationInfoTreeSelect(Map<String, Object> params);
	
	/**
	 * 获取排除用户的组织机构树（含复选框）
	 * @param params
	 * @return List - TreeSelectDataModel
	 * @author DH-Xxj
	 */
	List<TreeSelectDataModel> findOrganizationInfoTreeSelectNoUser(Map<String, Object> params);
	
	/**
	 * 查询调入组织机构对象
	 * @param params
	 * @return List - SysOrganizationInfo
	 * @author DH-Xxj
	 */
	List<SysOrganizationInfo> findOrganizationInfoObject(Map<String, Object> params);

	/**
	 * 查询调入组织机构对象
	 * @param params
	 * @return List - SysOrganizationInfo
	 * @author DH-Xxj
	 */
	List<SysOrganizationInfo> findOrganizationInfoObjectByIdOrName(Map<String, Object> params);
	
	/**
	 * 新增机构节点（公司、部门）
	 * @param params
	 * 		必要参数：pguid（上级机构唯一值guid，顶级默认值（'root'））
	 * 		必要参数：orgKind（新增机构类型：company 或 dept）
	 * 		必要参数：orgName（新增机构名称）
	 * 		必要参数：createUser（新增员工编号）
	 * @return
	 * @author DH-Xxj
	 */
	int insertOrganizationInfo(Map<String, Object> params);
	
	/**
	 * 分配用户
	 * @param params
	 * 		必要参数：pguid（上级机构唯一值guid，顶级默认值（'root'））
	 * 		必要参数：orgKind（新增机构类型：user）
	 * 		必要参数：orgid（用户编号）
	 * 		必要参数：orgName（用户名称）
	 * 		必要参数：createUser（新增员工编号）
	 * @return
	 * @author DH-Xxj
	 */
	int insertOrganizationInfoUser(Map<String, Object> params);
	
	/**
	 * 通过orgPathAll删除机构及其子树
	 * @param params
	 * 		必要参数：orgPathAll（要删除的机构全路径）
	 * @return
	 * @author DH-Xxj
	 */
	int deleteSubtreeByOrgPathAll(Map<String, Object> params);

	/**
	 * 通过orgid删除机构中指定的用户
	 * @param params
	 * 		必要参数：orgid（用户编号）
	 * @return
	 * @author DH-Xxj
	 */
	int deleteUserByOrgid(Map<String, Object> params);

	/**
	 * 修改用户姓名
	 * @param 实体-userInfo
	 * @return
	 * @author DH-Xxj
	 */
	int updateUserName(SysUserInfo userInfo);
	
	/**
	 * 通过guid修改机构名称
	 * @param guid 必要参数：要修改的机构唯一值
	 * @param orgName 必要参数：修改后的机构名称
	 * @param updateUser 必要参数：修改人
	 * @param updateTime 必要参数：修改日期
	 * @return
	 * @author DH-Xxj
	 */
	int updateOrgNameByGuid(Map<String, Object> params);
	
	/**
	 * 通过orgid修改机构名称
	 * @param orgid 必要参数：机构编码
	 * @param orgName 必要参数：修改后的机构名称
	 * @param updateUser 必要参数：修改人
	 * @param updateTime 必要参数：修改日期
	 * @return
	 * @author DH-Xxj
	 */
	int updateOrgNameByOrgid(Map<String, Object> params);
	
	/**
	 * 通过guid修改机构上级（机构转移）
	 * @param params
	 * 		必要参数：guid（要修改的机构唯一值）
	 * 		必要参数：pguid（修改后的上级机构唯一值guid）
	 * @return
	 * @author DH-Xxj
	 */
	int updatePguidByGuid(Map<String, Object> params);
	
	/**
	 * 通过guid修改机构管理者
	 * @param params
	 * 		必要参数：guid（要修改的机构唯一值）
	 * 		必要参数：orgManagers（修改后的机构管理者字符串，格示示例：[0000],[1001],[1002]）
	 * @return
	 * @author DH-Xxj
	 */
	int updateOrgManagersByGuid(Map<String, Object> params);

}
